package sessionBeans;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import entities.ArticuloVenta;
import exceptions.EntityAlreadyExistException;

/**
 * Session Bean implementation class AdministradorArticulosVentaBean
 */
@Stateless
public class AdministradorArticulosVentaBean implements AdministradorArticulosVenta {

    @PersistenceContext(unitName="CRM")
    private EntityManager em;
    
    public AdministradorArticulosVentaBean() {
        // TODO Auto-generated constructor stub
    }
    @SuppressWarnings("unchecked")
    @Override
	public ArticuloVenta buscarArticulo(String codigo){
    	Query q = em.createQuery("from ArticuloVenta a where lower(a.codigo) like :codigo");
		q.setParameter("codigo", codigo.toLowerCase());
		ArticuloVenta art = null;
		List<ArticuloVenta> articulos = (ArrayList<ArticuloVenta>) q.getResultList();
		if(!articulos.isEmpty()){
			art = articulos.get(0);
		}
		return art;
    }

	@SuppressWarnings("unchecked")
	@Override
	public List<ArticuloVenta> getAllArticulosVenta() {
		Query q = em.createQuery("from ArticuloVenta");
		List<ArticuloVenta> a = (ArrayList<ArticuloVenta>) q.getResultList();
		return a;
	}

	@Override
	public boolean grabarArticuloVenta(ArticuloVenta articulo)
		throws EntityAlreadyExistException {
		ArticuloVenta a = this.buscarArticulo(articulo.getCodigo());
		if(a!=null){
			throw new EntityAlreadyExistException("ArticuloVenta: " + articulo.getCodigo());
		}
		try{
			em.persist(articulo);
			return true;
		}catch(Exception e){
			e.printStackTrace();
		}
		return false;
	}

	@Override
	public boolean modificarArticuloVenta(ArticuloVenta nuevo,
			String codigoViejo) {
		ArticuloVenta viejo = this.buscarArticulo(codigoViejo);
		if(viejo!=null){
			viejo.setCodigo(nuevo.getCodigo());
			viejo.setDescripcion(nuevo.getDescripcion());
			viejo.setEstado(nuevo.getEstado());
			viejo.setNombre(nuevo.getNombre());
			viejo.setPrecioUnitario(nuevo.getPrecioUnitario());
			try{
				em.merge(viejo);
				return true;
			} catch(Exception e){
				e.printStackTrace();
			}
		}
		return false;
	}
	

}
